from django.core.management.base import BaseCommand
from django.contrib.auth.models import User, Group, Permission
from django.contrib.contenttypes.models import ContentType
from permissions.models import PermissionCategory, SystemConfig


class Command(BaseCommand):
    help = '初始化系统数据'

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('开始初始化系统数据...'))
        
        # 创建权限分组
        self.create_permission_categories()
        
        # 创建用户组
        self.create_user_groups()
        
        # 创建系统配置
        self.create_system_configs()
        
        self.stdout.write(self.style.SUCCESS('系统数据初始化完成！'))

    def create_permission_categories(self):
        """创建权限分组"""
        self.stdout.write('创建权限分组...')
        
        categories = [
            {'name': '用户管理', 'description': '用户相关权限', 'sort_order': 1},
            {'name': '权限管理', 'description': '权限相关功能', 'sort_order': 2},
            {'name': '系统管理', 'description': '系统配置相关', 'sort_order': 3},
        ]
        
        for cat_data in categories:
            category, created = PermissionCategory.objects.get_or_create(
                name=cat_data['name'],
                defaults={
                    'description': cat_data['description'],
                    'sort_order': cat_data['sort_order']
                }
            )
            if created:
                self.stdout.write(f'  创建权限分组: {category.name}')
            else:
                self.stdout.write(f'  权限分组已存在: {category.name}')

    def create_user_groups(self):
        """创建用户组"""
        self.stdout.write('创建用户组...')
        
        # 获取权限
        user_permissions = Permission.objects.filter(
            content_type__app_label__in=['auth', 'accounts']
        )
        permission_permissions = Permission.objects.filter(
            content_type__app_label='permissions'
        )
        admin_permissions = Permission.objects.filter(
            content_type__app_label='admin'
        )
        
        groups_data = [
            {
                'name': '系统管理员',
                'permissions': list(user_permissions) + list(permission_permissions) + list(admin_permissions)
            },
            {
                'name': '用户管理员',
                'permissions': list(user_permissions)
            },
            {
                'name': '普通用户',
                'permissions': []
            },
        ]
        
        for group_data in groups_data:
            group, created = Group.objects.get_or_create(
                name=group_data['name']
            )
            if created:
                self.stdout.write(f'  创建用户组: {group.name}')
            else:
                self.stdout.write(f'  用户组已存在: {group.name}')
            
            # 设置权限
            if group_data['permissions']:
                group.permissions.set(group_data['permissions'])
                self.stdout.write(f'    为 {group.name} 设置了 {len(group_data["permissions"])} 个权限')

    def create_system_configs(self):
        """创建系统配置"""
        self.stdout.write('创建系统配置...')
        
        configs = [
            {
                'key': 'SITE_NAME',
                'value': 'Django-Jazzmin权限管理系统',
                'description': '网站名称',
                'config_type': 'string'
            },
            {
                'key': 'SITE_DESCRIPTION',
                'value': '基于Django和Jazzmin的企业级权限管理系统',
                'description': '网站描述',
                'config_type': 'string'
            },
            {
                'key': 'MAX_LOGIN_ATTEMPTS',
                'value': '5',
                'description': '最大登录尝试次数',
                'config_type': 'integer'
            },
            {
                'key': 'SESSION_TIMEOUT',
                'value': '3600',
                'description': '会话超时时间（秒）',
                'config_type': 'integer'
            },
            {
                'key': 'ENABLE_USER_REGISTRATION',
                'value': 'false',
                'description': '是否允许用户注册',
                'config_type': 'boolean'
            },
        ]
        
        for config_data in configs:
            config, created = SystemConfig.objects.get_or_create(
                key=config_data['key'],
                defaults={
                    'value': config_data['value'],
                    'description': config_data['description'],
                    'config_type': config_data['config_type']
                }
            )
            if created:
                self.stdout.write(f'  创建系统配置: {config.key} = {config.value}')
            else:
                self.stdout.write(f'  系统配置已存在: {config.key} = {config.value}')